package ListNodePractice;

import java.util.Stack;

public class RemoveListNode_I {
    /**
     * 删除链表的倒数第N个节点
     * 给你一个链表，删除链表的倒数第n个结点，并且返回链表的头结点。
     * <p>
     * 示例 1：
     * <p>
     * 输入：head = [1,2,3,4,5], n = 2
     * 输出：[1,2,3,5]
     * 示例 2：
     * <p>
     * 输入：head = [1], n = 1
     * 输出：[]
     * 示例 3：
     * <p>
     * 输入：head = [1,2], n = 1
     * 输出：[1]
     *
     * @param head
     * @param n
     * @return
     */
    public static ListNode removeNthFromEnd(ListNode head, int n) {
        Stack<ListNode> stack = new Stack<>();
        //定义一个head的头结点
        ListNode yammy = new ListNode(0,head);
        ListNode temp = yammy;
        while (temp != null) {
            stack.add(temp);
            temp = temp.next;
        }
        for (int i = 0; i < n; i++) {
            stack.pop();
        }
        ListNode peek = stack.peek();
        peek.next = peek.next.next;
        return yammy.next;
    }

    public static void main(String[] args) {
        ListNode listNode0 = new ListNode(0);
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        listNode0.next = listNode1;
        listNode1.next = listNode2;
        listNode2.next = listNode3;
        System.out.println(listNode0);
        System.out.println(removeNthFromEnd(listNode0,2));
    }
}
